UnityがPlayMode起動中かどうかをメインスレッド外から見分ける方法


概要

メインスレッドだろうと、UnityがPlayMode起動中かどうかは判断できない(compile中なのでisCompilingにはなる)ので、

わりと有益な感じ。

マルチスレッドなエディタコードとかで効率化計ってて、PlayMode起動に入ったら即なにかを開始する、みたいなエディタコードで適応したい。



方法

プロジェクト内にUnityが特定のファイルを作り出すのを利用する。


PROJECT_FOLDER/Temp/__EditModeScene の有無でチェックができる。


プレイモードを起動 → 存在しない場合新規作成される

→ 存在する場合上書きする



Unity 4.6.1系で確認済み。

が、このデータは、「Unityがクラッシュした際に復旧する最後の手段」でもある。



参考:テラシュールウェア

Unityエディタのクラッシュ時に失われたシーン情報を復旧させる裏ワザ

http://tsubakit1.hateblo.jp/entry/2014/10/20/230851



つまり俺都合で勝手に消したりすると殺意の波動にやられる。



ので、消す訳にはいかず、タイムスタンプのみを切り出して別途保存する形で扱う。


・プレイモード or 単なるコンパイルが発生したあと、エディタ側コードの起動が発生する

・起動後、適当なタイミングや適当なスレッドで __EditModeScene のタイムスタンプをチェック

・以前のものと異なるようであればプレイモード開始中!

・以前のものと同じであれば、単なるコンパイル


という区別が出来る。



弱点

モロにUnityのversionに左右されるんじゃないだろうか。

あと別に、エディタメニューをコードから実行する形で隠蔽、フラッグをファイルとかに書く、というのも、まあマシで良いと思う。



以上。